#pragma once
#include "../Ode.h"

namespace Skill
{
	namespace Ode
	{
		public enum class DSurfaceParametersMode{
			Mu2 = dContactMu2,
			FDir1 = dContactFDir1,
			Bounce = dContactBounce,
			SoftERP = dContactSoftERP,
			SoftCFM = dContactSoftCFM,
			Motion1 = dContactMotion1,
			Motion2 = dContactMotion2,
			MotionN = dContactMotionN,
			Slip1 = dContactSlip1,
			Slip2 = dContactSlip2,

			Approx0	= dContactApprox0,
			Approx1_1 = dContactApprox1_1,
			Approx1_2 = dContactApprox1_2,
			Approx1 = dContactApprox1
		};


		public ref  class DSurfaceParameters
		{
			INTERNAL_CLASS_DECLARATION(DSurfaceParameters,dSurfaceParameters);
		public:

			DSurfaceParameters()
			{
				_SetPointer(new dSurfaceParameters(),true);
			}
			///<summary> must always be defined </summary>
			VALUE_PROP_DECLARATION_GETSET(DSurfaceParametersMode,Mode);
			///<summary> must always be defined </summary>
			VALUE_PROP_DECLARATION_GETSET(dReal,Mu);

			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal,Mu2);
			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal,Bounce);
			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal,BounceVelocity);
			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal,SoftErp);
			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal,SoftCfm);
			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal, Motion1);

			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal, Motion2);

			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal, MotionN);

			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal,Slip1);

			///<summary> only defined if the corresponding flag is set in mode </summary> 
			VALUE_PROP_DECLARATION_GETSET(dReal,Slip2);
		};
	}
}